<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>16_RegExp-正则的贪婪惰性</title>
  <!-- 
  在 JavaScript 中，正则表达式的量词可以是贪婪的或懒惰的（也称为非贪婪的）。了解这两种行为对于正确匹配字符串非常重要。
  一、贪婪匹配

   1. 定义
  贪婪匹配是指正则表达式的量词会尽可能多地匹配字符，直到满足整个正则表达式的条件为止。它会尝试匹配尽可能长的字符串。

   2. 示例
  const regex = /<.*>/; // 使用贪婪量词 *
  const str = '<div>内容</div>';
  console.log(str.match(regex)); // 输出: ['<div>内容</div>']
  在这个例子中， `<.*>`  会匹配从第一个  `<`  到最后一个  `>`  之间的所有字符，因此它返回了整个字符串。

  二、懒惰匹配
   1. 定义
  懒惰匹配是指正则表达式的量词会尽可能少地匹配字符，尽早满足整个正则表达式的条件。它会尝试匹配最短的字符串。
  const regex = /<.*?>/; // 使用懒惰量词 *?
  const str = '<div>内容</div>';
  console.log(str.match(regex)); // 输出: ['<div>']
  在这个例子中， `<.*?>`  会匹配从第一个  `<`  到第一个  `>`  之间的字符，因此它只返回了  `<div>` 。

  三、贪婪与懒惰的比较

  - 贪婪匹配：尽可能多地匹配字符，直到最后一个可能的匹配。
  - 懒惰匹配：尽可能少地匹配字符，尽早满足条件。

   4. 例子比较
  const str = '<div>内容</div>';

  // 贪婪匹配
  const greedyRegex = /<.*>/;
  console.log(str.match(greedyRegex)); // 输出: ['<div>内容</div>']

  // 懒惰匹配
  const lazyRegex = /<.*?>/;
  console.log(str.match(lazyRegex)); // 输出: ['<div>']
  在这个比较中，贪婪匹配返回了整个字符串，而懒惰匹配只返回了最短的匹配。

  四、总结
  - 贪婪量词（如  `*` 、 `+` 、 `?` 、 `{n,m}` ）会尽可能多地匹配字符。
  - 懒惰量词（在量词后加  `?` ）会尽可能少地匹配字符。
  - 了解贪婪和懒惰匹配的区别可以帮助开发者在使用正则表达式时更精确地控制匹配结果。
  -->
</head>
<body>

  <script>
    // 1. 贪婪模式/惰性模式
    const str = "我最喜欢的两本书: 《黄金时代》和《沉默的大多数》、《一只特立独行的猪》"
    const reg = /《.+?》/ig
    console.log(str.match(reg));
    

  </script>
  
</body>
</html>